home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / GRAPHICS / TOOLS / MPEGENCODE / doc / InputForm < prev    next >
Text File  |  1993-09-07  |  2KB  |  74 lines

  1.                         ----------------
  2.                         | FILE FORMATS |
  3.                         ----------------
  4.  
  5. PPM FORMAT
  6. ----------
  7.  
  8. To give you an idea of what a PPM file is, the following code will write
  9. one out:
  10.  
  11.     int **red, **green, **blue;
  12.  
  13.     void        WritePPM(char *fileName, int width, int height, int maxVal)
  14.     {
  15.         register int x, y;
  16.         unsigned char   r, g, b;
  17.  
  18.         fprintf(stdout, "P6\n");
  19.         fprintf(stdout, "%d %d\n", width, height);
  20.         fprintf(stdout, "%d\n", maxVal);
  21.  
  22.         for ( y = 0; y < height; y++ )
  23.             for ( x = 0; x < width; x++ )
  24.             {
  25.                 r = red[x][y];  g = green[x][y];    b = blue[x][y];
  26.  
  27.                 fwrite(&r, 1, 1, stdout);
  28.                 fwrite(&g, 1, 1, stdout);
  29.                 fwrite(&b, 1, 1, stdout);
  30.             }
  31.     }
  32.  
  33. maxVal is the maximum color value.  It must be between 0 and 255 inclusive.
  34. Generally speaking, it should be 255 always.
  35.  
  36.  
  37. YUV FORMAT
  38. ----------
  39.  
  40. You should be aware that the YUV format used in the MPEG encoder is DIFFERENT
  41. than the Abekas YUV format.  The reason for this is that in MPEG, the U and
  42. V components are subsampled 4:1.
  43.  
  44. To give you an idea of what format the YUV file must be in, the following
  45. code will read in a YUV file:
  46.  
  47.     unsigned char **y_data, **cr_data, **cb_data;
  48.  
  49.     void        ReadYUV(char *fileName, int width, int height)
  50.     {
  51.         FILE *fpointer;
  52.         register int y;
  53.  
  54.         /* should allocate memory for y_data, cr_data, cb_data here */
  55.  
  56.         fpointer = fopen(fileName, "r");
  57.  
  58.         for (y = 0; y < height; y++)                    /* Y */
  59.             fread(y_data[y], 1, width, fpointer);
  60.  
  61.         for (y = 0; y < height / 2; y++)                /* U */
  62.             fread(cb_data[y], 1, width / 2, fpointer);
  63.  
  64.         for (y = 0; y < height / 2; y++)                /* V */
  65.             fread(cr_data[y], 1, width / 2, fpointer);
  66.  
  67.         fclose(fpointer);
  68.     }
  69.  
  70. There are two reasons why you'd want to use YUV files rather than PPM files:
  71.         1)  The YUV files are 50% the size of the corresponding PPM files
  72.         2)  The ENCODER will run slightly faster, since it doesn't have to
  73.             do the RGB to YUV conversion itself.
  74.